/******************************************************************************* * Copyright (c) 2000, 2013 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.ant.internal.ui.views.actions; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.List; import org.eclipse.ant.internal.ui.AntUIImages; import org.eclipse.ant.internal.ui.AntUtil; import org.eclipse.ant.internal.ui.IAntUIConstants; import org.eclipse.ant.internal.ui.IAntUIHelpContextIds; import org.eclipse.ant.internal.ui.model.AntProjectNode; import org.eclipse.ant.internal.ui.model.AntProjectNodeProxy; import org.eclipse.ant.internal.ui.preferences.FileSelectionDialog; import org.eclipse.ant.internal.ui.views.AntView; import org.eclipse.core.resources.IFile; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.action.Action; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.swt.widgets.Display; import org.eclipse.ui.PlatformUI; /** * Action that prompts the user for build files and adds the selected files to an <code>AntView</code> */ public class AddBuildFilesAction extends Action { private AntView view; public AddBuildFilesAction(AntView view) { super(AntViewActionMessages.AddBuildFilesAction_1, AntUIImages.getImageDescriptor(IAntUIConstants.IMG_ADD)); this.view = view; setToolTipText(AntViewActionMessages.AddBuildFilesAction_0); PlatformUI.getWorkbench().getHelpSystem().setHelp(this, IAntUIHelpContextIds.ADD_BUILDFILE_ACTION); } /* * (non-Javadoc) * * @see org.eclipse.jface.action.IAction#run() */ @Override public void run() { String title = AntViewActionMessages.AddBuildFilesAction_2; String message = AntViewActionMessages.AddBuildFilesAction_4; String filterExtension = AntUtil.getKnownBuildFileExtensionsAsPattern(); String filterMessage = AntViewActionMessages.AddBuildFilesAction_5; FileSelectionDialog dialog = new FileSelectionDialog(Display.getCurrent().getActiveShell(), getBuildFiles(), title, message, filterExtension, filterMessage); dialog.open(); final Object[] result = dialog.getResult(); if (result == null) { return; } try { PlatformUI.getWorkbench().getProgressService().busyCursorWhile(new IRunnableWithProgress() { @Override public void run(IProgressMonitor monitor) { monitor.beginTask(AntViewActionMessages.AddBuildFilesAction_3, result.length); for (int i = 0; i < result.length && !monitor.isCanceled(); i++) { Object file = result[i]; if (file instanceof IFile) { String buildFileName = ((IFile) file).getFullPath().toString(); final AntProjectNode project = new AntProjectNodeProxy(buildFileName); project.getName(); monitor.worked(1); Display.getDefault().asyncExec(new Runnable() { @Override public void run() { view.addProject(project); } }); } } } }); } catch (InvocationTargetException e) { // do nothing } catch (InterruptedException e) { // do nothing } } private List<IFile> getBuildFiles() { AntProjectNode[] existingProjects = view.getProjects(); List<IFile> buildFiles = new ArrayList<>(existingProjects.length); for (int j = 0; j < existingProjects.length; j++) { AntProjectNode existingProject = existingProjects[j]; buildFiles.add(AntUtil.getFile(existingProject.getBuildFileName())); } return buildFiles; } }